﻿#ifndef CUSTOMLISTITEM_H
#define CUSTOMLISTITEM_H
#include <Qt>
#include <QListWidgetItem>
#include <QLabel>
#include <QHBoxLayout>
#include <QSpacerItem>
#include <QtDebug>
#include <QMouseEvent>
#include <QPainter>
#include <QPalette>
#include <QStyle>
#include <QGroupBox>
#include <QScrollArea>
#include "itemmodel.h"

class CustomListItem : public QWidget
{

    Q_OBJECT

public:
    // Item 展示的风格
    enum ItemStyle
    {
        // 默认风格
        Nomarl = 0,
        // 双背景风格
        PairIcon,
        // 左右列风格
        Column
    };


public:
    CustomListItem();


    explicit CustomListItem(QWidget *parent = nullptr);

    CustomListItem(ItemStyle style = ItemStyle::Nomarl,QString name = "名称", QString category = "分类", bool isFinish = false);

    CustomListItem(ItemModel& item, ItemStyle style = ItemStyle::Nomarl);


    /**
     * 选中效果
     * @brief selected
     */
    void selected();

    /**
     * 取消选中效果
     * @brief unSelect
     */
    void unSelect();

    /**
     * 获取该节点是否处于选中状态
     * @brief isSelected
     * @return
     */
    bool isSelected();

    /**
     * 获取控件的唯一KEY
     * @brief getKey
     * @return
     */
    QString getKey();


protected:

    // 重写mousePressEvent事件
    virtual void mousePressEvent(QMouseEvent *event);


signals:
    //自定义clicked()信号,在mousePressEvent事件发生时触发
    void clicked();

private:

    /**
     * 初始化
     * @brief init
     */
    void init();

    /**
     * 初始化文字旁边的图标
     * @brief initIconL
     */
    void initIconL();

    /**
     * 绑定处理事件
     * @brief bindEvent
     */
    void bindEvent();



private:

    // 唯一标识KEY
    QString key;

    // 名称
    QString name;

    // 类别
    QString category;

    // 是否下载，影响图标
    bool isFinish;

    // 子控件
    QLabel* nameL;
    QLabel* categoryL;
    QLabel* iconL;
    QLabel* leftIconL;
    QLabel* rightIconL;

    // 控件风格
    ItemStyle style;


    bool isSelect;



};

#endif // CUSTOMLISTITEM_H
